﻿// 206 二维背包.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>



using namespace std;
/*
http://oj.daimayuan.top/course/5/problem/166

有 n种物品要放到一个袋子里，袋子的总容量为 m，我们一共有 k点体力值。
第 i种物品的体积为 vi，把它放进袋子里会获得 wi的收益，
并且消耗我们 ti点体力值，每种物品只能取一次。
问如何选择物品，使得在物品的总体积不超过 m并且花费总体力不超过 k的情况下，获得最大的收益？
请求出最大收益。

输入格式
第一行三个整数 n,m,k。

接下来 n行，每行三个整数 vi,wi,ti。

输出格式
一个整数，表示答案。

样例输入
5 10 10
3 8 3
4 10 2
5 1 5
1 10 4
4 4 1
样例输出
28
数据规模
对于所有数据，保证 1≤n,m,k,vi,wi,ti≤100。
*/

const int N = 150;
int dp[N][N][N];
int n, m, k;
int V[N], W[N], T[N];

int main()
{
	cin >> n >> m >> k;

	for (int i = 1; i <= n; i++) {
		int a, b, c; cin >> a >> b >> c;
		V[i] = a; W[i] = b; T[i] = c;
	}

	for (int i = 1; i <= n; i++) {
		int d = 999;
		for (int j = 0; j <= m; j++) {
			for (int l = 0; l <= k; l++) {
				dp[i][j][l] = dp[i - 1][j][l];
				if (j >= V[i] && l >= T[i]) {
					dp[i][j][l] = max(dp[i][j][l], dp[i-1][j - V[i]][l - T[i]] + W[i]);
				}
			}
		}
	}

	cout << dp[n][m][k] << endl;

	return 0;
}

 